這篇原本的ES6部分寫太爛,被我砍了(
首先知道甚麼是宣告跟賦值
var a=2;
//這句程式其實可以分成兩個部分
//分別是
var a;//宣告
a=2;//賦值
如果宣告了一個變數但沒有賦值,讀取這個值會得到undefined,
這個變數在記憶體中是從在的,但是還沒有值。
但如果對一個未宣告過的變數,就是undeclared,
JS在記憶體中找不到這個變數,會跳出錯誤
let是ES6新增的變數宣告方式,會有新的變數宣告方式,
代表var一定哪邊有缺陷,來看看下面
var a = 1;
var a = 5;
console.log(a); //5
let b = 1;
let b = 5;//會出現錯誤
var在宣告已經宣告過的變數時,JS就會無視宣告,直接把值賦給原本變數,
但用let宣告相同變數會跳出錯誤,
當你不小心宣告名稱相同的變數時,用let會用錯誤提醒你,
用var不會跳錯,但會導致錯誤的輸出結果(還很難debug
接下來是下面這個程式
for (var i = 0; i < 10; i++) {}
console.log(i); //10
for (let j = 0; j < 10; j++) {}
console.log(j); //錯誤 j未定義
var的作用範圍是函式,let的作用範圍是區塊(就是{}
),
如果像上面在if或for迴圈使用var宣告一個i,
會建立一個全域變數i,如果原本全域範圍就有i變數時則會改變i的值。
有人說既然let都出了,就不要用再var了,
但基本上第一種錯誤正常情況下是可以避免的,
在for迴圈一定要用let,其他情況下用let或var就看個人喜好。
也是ES6新增的功能,可以用來宣告一個常數(不會改變的值)
const pi = 3.14;
pi = 3.15;//錯誤 不能重新賦值
const c ;//宣告時未賦值 也會跳錯
const array = [1, 2, 3];
array.push(4);//沒有把常數給重複值 單純改變陣列(或物件)內容是可以的
console.log(array); //[1,2,3,4]